<?php
/*
 * 原型模式->拷贝对象
 * ----------------------------------------------
 * 原型模式通过复制已经存在的实例来返回新的实例，而不是新建实例，
 * 并且原型（被复制的实例）是可定制的；
 * 原型模式多用于创建复杂的或耗时的实例，这种情况下，复制一个已经存在的实例是程序运行更高效无疑是一种好办法；
 * ----------------------------------------------
 * 浅拷贝：浅拷贝只负责当前对象实例，对引用的对象不做拷贝。
 * ----------------------------------------------
 * 深拷贝: 深拷贝把要拷贝的对象所引用的对象也都拷贝了一次
 * ----------------------------------------------
 * @author    Leo
 * @filename run.php
 * @Created  2015/10/5 23:42
 */

//自动加载
spl_autoload_register(function($class){
	$path = './Service/'.$class.'.php';
	require $path;
});

$course_prototype  = new Course('php设计模式详解','leo','具备使用设计模式进行面向对象编程的能力');

$student1 = new Student('小王','男',16);
$student2 = new Student('小红','女',23);

$course_prototype->addStudent($student1);
$course_prototype->addStudent($student2);

//浅拷贝
$course2 = clone $course_prototype;

//深拷贝：利用序列化
$course3 = $course_prototype->copy();

$student1->name = '小王2';

//浅拷贝下学生对象姓名会变成 '小王2'
$course2->show();

//深拷贝下学生对象姓名不变
$course3->show();

